package cn.wolfcode.wolf2w.service;

import cn.wolfcode.wolf2w.domain.Travel;
import cn.wolfcode.wolf2w.domain.UserInfo;
import cn.wolfcode.wolf2w.query.TravelQuery;
import cn.wolfcode.wolf2w.redis.vo.TravelStatisVo;
import org.springframework.data.domain.Page;

import java.util.List;

public interface ITravelService {
	/**
	 * 新增
	 */
	void save(Travel travel);

	/**
	 * 更新
	 */
	void update(Travel travel);

	/**
	 * 删除
	 */
	void delete(String id);

	/**
	 * 查询单个
	 */
	Travel get(String id);

	/**
	 * 查询全部
	 */
	List<Travel> list();

	/**
	 * 分页查询
	 */
	Page<Travel> query(TravelQuery qo, UserInfo userInfo);

	/**
	 * 审核
	 * @param id
	 * @param state
	 */
	void changeState(String id, int state);

	/**
	 * 新增/更新
	 * @param travel
	 */
	void saveOrUpdate(Travel travel);

	/**
	 * 指定目的地下点击率最高的三篇游记
	 * @param destId
	 * @return
	 */
	List<Travel> queryByViewnum(String destId);

	/**
	 * 点赞游记
	 * @param tid
	 * @param uid
	 * @return
	 */
	boolean strategyThumbup(String tid, String uid);
	/**
	 * 刷新增加阅读量,统计vo
	 * @param tid
	 * @return
	 */
	TravelStatisVo travelsVo(String tid);

	/**
	 * 收藏/取消
	 * @param tid
	 * @param uid
	 * @return
	 */
	boolean travelFavor(String tid, String uid);

	/**
	 * 获取某个用户的游记收藏列表
	 * @param userId
	 * @return
	 */
	List<String> getTravelsFavor(String userId);

	/**
	 * 游记vo持久化
	 * @param vo
	 */
	void updateTravelVo(TravelStatisVo vo);

	/**
	 * 根据目的地名字查询游记
	 * @param destName
	 * @return
	 */
	List<Travel> findByDestName(String destName);
}
